//
//  DBTableViewViewController.m
//  DuoBao
//
//  Created by arons on 16/3/28.
//  Copyright © 2016年 aron. All rights reserved.
//

#import "DBTableViewController.h"
#import "ViewFactory.h"
#import "MBProgressHUD+MJ.h"

@interface DBTableViewController ()

@end

@implementation DBTableViewController

- (instancetype)init
{
    self = [super init];
    if (self) {
        // 设置TableView
//        [self __setupTableView];
        
        _shouldAutoLoadData = YES;
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];

//    [self __layoutTableView];
    // TableView设置
    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
    self.tableView.tableFooterView = [UIView new];
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    
    // 设置数据
    _objects = [NSMutableArray array];
    
    // 设置下拉和上拉刷新
    [self setupPullRefresh];
    [self setupPullUp];
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        // 获取数据
        if (_shouldAutoLoadData) {
            if (self.tableView.mj_header) {
                [self.tableView.mj_header beginRefreshing];
            }else {
                [self __refresh];
            }
        }
    });
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)dealloc
{
    BMLog(@"====");
//    _tableView.delegate = nil;
//    _tableView.dataSource = nil;
}

/*
- (void)__setupTableView {
    UITableView* tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) style:UITableViewStylePlain];
    tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
    tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
    // tableView.contentInset = UIEdgeInsetsMake(0, 0, 100, 0);
    tableView.delegate = self;
    tableView.dataSource = self;
    _tableView = tableView;
}

- (void)__layoutTableView {
    
    [self.view addSubview:_tableView];
    
    // 添加自动布局的约束
    _tableView.translatesAutoresizingMaskIntoConstraints = NO;
    
    NSDictionary *views = NSDictionaryOfVariableBindings(self.view, _tableView);
    
    NSArray* constraintH = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_tableView]-0-|" options:0 metrics:nil views:views];
    NSArray* constraintV = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[_tableView]-0-|" options:0 metrics:nil views:views];
    
    [self.view addConstraints:constraintH];
    [self.view addConstraints:constraintV];
}
 */

/**
 *  添加下拉的动画图片
 */
- (void)setupPullRefresh {
    /*************** 下拉刷新 ***************/
    //添加下拉的动画图片
    DBRefreshGifHeader* header = [ViewFactory generateRefreshGifHeaderWithTarget:self refreshingAction:@selector(__refresh)];
    self.tableView.mj_header = header;
}

- (void)setupPullUp {
    /*************** 上拉加载更多 ***************/
    typeof(self) __weak weakSelf = self;
    MJRefreshFooter* footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
        [weakSelf requestDatasOnpage:weakSelf.page refresh:NO];
    }];
    self.tableView.mj_footer = footer;
}

/**
 *  下拉刷新
 */
- (void)unSetupPullRefresh {
    self.tableView.mj_header = nil;
}

/**
 *  上拉加载更多
 */
- (void)unSetupPullUp {
    self.tableView.mj_footer = nil;
}

#pragma mark - ui action f

/**
 *  刷新
 */
- (void)__refresh
{
    [self requestDatasOnpage:1 refresh:YES];
}

- (void)onPullUp{
    [self requestDatasOnpage:_page refresh:NO];
}

#pragma mark - UITableViewDataSource

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _objects.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString* cellId = @"CellID";
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellId];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
    }
    
    // 测试数据
    NSObject* data = _objects[indexPath.row];
    cell.textLabel.text = [data description];
    
    return cell;
}

#pragma mark - public

- (NSInteger)allCount {
    return _objects.count;
}

/**
 *  网络请求数据，方法由子类重写
 */
- (void)requestDatasOnpage:(NSInteger)page refresh:(BOOL)refresh {
    NSAssert(NO, @"子类需要重写这个方法用于获取数据");
}

/**
 *  处理加载结束数据回调
 *  @param tmpDatas 某一次请求的数据
 */
- (void)handleDataLoadFailSuccess:(NSArray*)tmpDatas refresh:(BOOL)refresh {
    // 处理数据追加
    if (refresh) {
        [self.objects removeAllObjects];
    }
    [self.objects addObjectsFromArray:tmpDatas.copy];
}

/**
 处理数据加载失败的情况
 */
- (void)handleDataLoadFail {
    // 处理上下拉
    [self.tableView.mj_header endRefreshing];
    [self.tableView.mj_footer endRefreshing];
    [MBProgressHUD hideHUD];
    [MBProgressHUD showError:@"服务器发生错误啦，请稍后重试~"];
    
    [self.tableView reloadData];
}

@end
